package com.xie.leetcode.array;

//593. 有效的正方形
//        给定2D空间中四个点的坐标 p1, p2, p3 和 p4，如果这四个点构成一个正方形，则返回 true 。
//
//        点的坐标 pi 表示为 [xi, yi] 。输入 不是 按任何顺序给出的。
//
//        一个 有效的正方形 有四条等边和四个等角(90度角)。
//
//        示例 1:
//
//        输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
//        输出: True
//        示例 2:
//
//        输入：p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]
//        输出：false
//        示例 3:
//
//        输入：p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1]
//        输出：true

import java.util.HashSet;
import java.util.Set;

/**
 * @author xiezhendong
 * @date 2022/7/29
 */
public class ValidSquare {
    public static void main(String[] args) {
        ValidSquare validSquare = new ValidSquare();
        System.out.println(validSquare.validSquare(new int[]{0, 0}, new int[]{1, 1}, new int[]{1, 0}, new int[]{0, 1}));
        System.out.println(validSquare.validSquare(new int[]{0, 0}, new int[]{1, 1}, new int[]{1, 0}, new int[]{0, 12}));
        System.out.println(validSquare.validSquare(new int[]{1, 0}, new int[]{-1, 0}, new int[]{0, 1}, new int[]{0, -1}));
    }

    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        Set<Double> lSet = new HashSet<>();

        double l12 = getDistance(p1, p2);
        double l13 = getDistance(p1, p3);
        double l14 = getDistance(p1, p4);
        double l23 = getDistance(p2, p3);
        double l24 = getDistance(p2, p4);
        double l34 = getDistance(p3, p4);

        lSet.add(l12);
        lSet.add(l13);
        lSet.add(l14);
        lSet.add(l23);
        lSet.add(l24);
        lSet.add(l34);

        if (lSet.size() != 2) {
            return false;
        }

        Double[] lArray = lSet.toArray(new Double[lSet.size()]);
        if (lArray[0] + lArray[0] != lArray[1] && lArray[1] + lArray[1] != lArray[0]) {
            return false;
        }

        return true;
    }

    private double getDistance(int[] p1, int[] p2) {
        return Math.sqrt(Math.abs((p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1])));
    }
}
